package com.yl.common.domain.base.dto;

import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.util.CollectionUtils;

import java.util.ArrayList;
import java.util.List;

/**
 * 分页参数对象
 */
@Data
public class PageDTO extends BaseDTO{

    @ApiModelProperty(value = "当前页数 不传 默认1", dataType = "int", required = false,example = "1")
    private Integer pageNum = 1;

    @ApiModelProperty(value = "每页展示的数目 不传 默认10", dataType = "int", required = false,example = "10")
    private Integer pageSize = 10;

    @ApiModelProperty(value = "排序对象 post请求使用这个对象 如果get请求使用orderColumn、orderType字段" , dataType = "PageOrderDTO")
    private List<PageOrderDTO> orders;

    @ApiModelProperty(value = "排序列名 多个逗号分隔 例如id,name,age 下标需要和排序类型对应" , dataType = "String")
    private String orderColumn;

    @ApiModelProperty(value = "排序类型 多个逗号分隔 例如true,false,true 下标需要和排序列名对应 true表示正序 fasle表示倒序" , dataType = "String")
    private String orderType;

    /**
     * 创建MybatisPlus的分页对象
     */
    public <T extends PageDTO,K> Page<K> createPage(T t) {
        //创建mybatis plus的分页对象
        Integer pageNum = t.getPageNum();
        Integer pageSize = t.getPageSize();
        Page<K> page = new Page<K>(pageNum, pageSize);

        //排序字段设置
        if(CollectionUtils.isEmpty(orders)){
            return page;
        }
        List<OrderItem> orderItems = new ArrayList<>();
        for(PageOrderDTO i:orders){
            String column = i.getColumn();
            Boolean isAsc = i.getIsAsc();
            if(StrUtil.isEmpty(column)){
                continue;
            }
            OrderItem orderItem = new OrderItem();
            orderItem.setColumn(column);
            orderItem.setAsc(isAsc);
        }
        if(!CollectionUtils.isEmpty(orderItems)){
            page.setOrders(orderItems);
        }

        return page;
    }

}
